টাস্ক প্যারালাল লাইব্রেরি (Task Parallel Library বা TPL) সি# এ একটি শক্তিশালী কনকারেন্সি লাইব্রেরি, যা সমান্তরাল প্রোগ্রামিং (Parallel Programming) সহজ করে। এটি .NET ফ্রেমওয়ার্কের System.Threading.Tasks নেমস্পেসের অংশ এবং টাস্ক-ভিত্তিক কাজগুলো সমান্তরালে চালানোর জন্য ডিজাইন করা হয়েছে। TPL এর মাধ্যমে প্যারালাল প্রোগ্রামিংয়ের জটিলতা কমানো যায় এবং প্রোগ্রামের কার্যক্ষমতা বৃদ্ধি করা যায়।
TPL এর বৈশিষ্ট্য
- সহজ টাস্ক ব্যবস্থাপনা: TPL ব্যবহার করে টাস্ক তৈরি, পরিচালনা এবং ট্র্যাক করা সহজ।
- সহজ কনকারেন্সি নিয়ন্ত্রণ: একাধিক কাজকে সমান্তরালে চালানোর সুবিধা।
- Error Handling: TPL সহজে এক্সেপশন হ্যান্ডলিং এবং টাস্ক ক্যাঙ্কেল করার জন্য ব্যবস্থা সরবরাহ করে।
TPL এর গুরুত্বপূর্ণ কিছু ক্লাস ও মেথড
- Task: টাস্ক তৈরি ও পরিচালনা করতে ব্যবহৃত।
- Task.Run: একটি টাস্ক শুরু করে।
- Task.WhenAll এবং Task.WhenAny: একাধিক টাস্ককে একত্রে পরিচালনা করতে ব্যবহৃত।
- Parallel.For এবং Parallel.ForEach: লুপকে সমান্তরালে চালানোর জন্য ব্যবহৃত।
টাস্ক তৈরি ও ব্যবহার
Task ক্লাস দিয়ে টাস্ক তৈরি করা হয় এবং Start() মেথড বা Task.Run দিয়ে টাস্ক চালানো যায়।
উদাহরণ: Task ক্লাস ব্যবহার করে টাস্ক তৈরি
using System;
using System.Threading.Tasks;
public class Program
{
public static void Main()
{
Task task = new Task(() =>
{
for (int i = 1; i <= 5; i++)
{
Console.WriteLine("Task running: " + i);
}
});
task.Start();
task.Wait(); // টাস্ক শেষ হওয়ার জন্য অপেক্ষা
Console.WriteLine("Task completed.");
}
}
Task.Run() ব্যবহার করে টাস্ক চালানো
Task.Run একটি নতুন টাস্ক তৈরি এবং চালানোর সহজ পদ্ধতি।
using System;
using System.Threading.Tasks;
public class Program
{
public static async Task Main()
{
Task task = Task.Run(() =>
{
for (int i = 1; i <= 5; i++)
{
Console.WriteLine("Running task: " + i);
}
});
await task; // টাস্ক শেষ হওয়া পর্যন্ত অপেক্ষা
Console.WriteLine("Task is complete.");
}
}
একাধিক টাস্ক পরিচালনা (Task.WhenAll এবং Task.WhenAny)
Task.WhenAll এবং Task.WhenAny মেথডগুলো একাধিক টাস্ক চালানো এবং একসাথে পরিচালনা করতে ব্যবহৃত হয়।
উদাহরণ: Task.WhenAll দিয়ে একাধিক টাস্ক একসাথে চালানো
using System;
using System.Threading.Tasks;
public class Program
{
public static async Task Main()
{
Task task1 = Task.Run(() => Console.WriteLine("Task 1"));
Task task2 = Task.Run(() => Console.WriteLine("Task 2"));
Task task3 = Task.Run(() => Console.WriteLine("Task 3"));
await Task.WhenAll(task1, task2, task3); // সব টাস্ক শেষ হওয়া পর্যন্ত অপেক্ষা
Console.WriteLine("All tasks completed.");
}
}
Task.WhenAny দিয়ে একটিমাত্র টাস্ক শেষ হওয়া পর্যন্ত অপেক্ষা
using System;
using System.Threading.Tasks;
public class Program
{
public static async Task Main()
{
Task task1 = Task.Delay(2000); // ২ সেকেন্ড অপেক্ষা
Task task2 = Task.Delay(1000); // ১ সেকেন্ড অপেক্ষা
await Task.WhenAny(task1, task2); // যেকোনো একটি টাস্ক শেষ হলে পরবর্তী কোড চালাবে
Console.WriteLine("One of the tasks completed.");
}
}
Parallel ক্লাসের ব্যবহার
Parallel.For এবং Parallel.ForEach সমান্তরালে লুপ চালানোর জন্য ব্যবহৃত হয়।
উদাহরণ: Parallel.For
using System;
using System.Threading.Tasks;
public class Program
{
public static void Main()
{
Parallel.For(1, 6, i =>
{
Console.WriteLine("Parallel Task: " + i);
});
Console.WriteLine("Parallel.For loop completed.");
}
}
উদাহরণ: Parallel.ForEach
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
public class Program
{
public static void Main()
{
List<string> names = new List<string> { "Alice", "Bob", "Charlie" };
Parallel.ForEach(names, name =>
{
Console.WriteLine("Processing: " + name);
});
Console.WriteLine("Parallel.ForEach loop completed.");
}
}
TPL এর মাধ্যমে টাস্ক ক্যান্সেল করা (Task Cancellation)
কখনো কখনো নির্দিষ্ট শর্তে টাস্ক বন্ধ করা প্রয়োজন হতে পারে। TPL এ CancellationToken এর মাধ্যমে টাস্ক ক্যান্সেল করা যায়।
using System;
using System.Threading;
using System.Threading.Tasks;
public class Program
{
public static async Task Main()
{
CancellationTokenSource cts = new CancellationTokenSource();
CancellationToken token = cts.Token;
Task task = Task.Run(() =>
{
for (int i = 1; i <= 5; i++)
{
if (token.IsCancellationRequested)
{
Console.WriteLine("Task canceled.");
return;
}
Console.WriteLine("Task running: " + i);
Thread.Sleep(1000);
}
}, token);
await Task.Delay(2000); // কিছু সময় অপেক্ষা
cts.Cancel(); // টাস্ক ক্যান্সেল
await task;
Console.WriteLine("Main task completed.");
}
}
সংক্ষেপে
- Task: একটি নির্দিষ্ট কাজ চালায় এবং কনকারেন্টলি কাজ সম্পন্ন করে।
- Task.Run(): নতুন টাস্ক তৈরি এবং চালানো সহজ করে।
- Task.WhenAll এবং Task.WhenAny: একাধিক টাস্ককে একত্রে বা আলাদাভাবে পরিচালনা করা যায়।
- Parallel.For এবং Parallel.ForEach: লুপ চালানো সমান্তরালে।
- CancellationToken: টাস্ক ক্যান্সেল করতে ব্যবহৃত হয়।
Task Parallel Library সি# এ কনকারেন্সি এবং প্যারালালিজমকে সহজ এবং কার্যকর করে তোলে। এটি ব্যবহার করে কার্যক্ষমতা বৃদ্ধি, সমান্তরালে কাজ পরিচালনা, এবং আরও দ্রুত সাড়া প্রদান করা সম্ভব হয়।